import tkinter as tk
from tkinter import commondialog, filedialog, colorchooser, messagebox


class CommonDialogExample:
    def __init__(self, root):
        self.root = root
        self.root.title("Tkinter Common Dialogs Example")
        self.root.geometry("400x300")

        # 创建按钮框架
        button_frame = tk.Frame(root)
        button_frame.pack(expand=True, fill=tk.BOTH, padx=20, pady=20)

        # 文件选择对话框按钮
        file_btn = tk.Button(
            button_frame,
            text="选择文件",
            command=self.show_file_dialog
        )
        file_btn.pack(fill=tk.X, pady=5)

        # 颜色选择对话框按钮
        color_btn = tk.Button(
            button_frame,
            text="选择颜色",
            command=self.show_color_dialog
        )
        color_btn.pack(fill=tk.X, pady=5)

        # 消息对话框按钮
        msg_btn = tk.Button(
            button_frame,
            text="显示消息",
            command=self.show_message_dialog
        )
        msg_btn.pack(fill=tk.X, pady=5)

        # 保存文件对话框按钮
        save_btn = tk.Button(
            button_frame,
            text="保存文件",
            command=self.show_save_dialog
        )
        save_btn.pack(fill=tk.X, pady=5)

        # 输出标签
        self.result_label = tk.Label(root, text="操作结果将显示在这里", wraplength=350)
        self.result_label.pack(pady=10)

    def show_file_dialog(self):
        """显示文件选择对话框"""
        dialog = filedialog.askopenfilename(
            title="选择文件",
            filetypes=[("文本文件", "*.txt"), ("Python文件", "*.py"), ("所有文件", "*.*")]
        )
        if dialog:
            self.result_label.config(text=f"选择的文件: {dialog}")
        else:
            self.result_label.config(text="未选择任何文件")

    def show_color_dialog(self):
        """显示颜色选择对话框"""
        color_result = colorchooser.askcolor(title="选择颜色")
        if color_result[1]:  # 如果用户选择了颜色而不是取消
            self.result_label.config(
                text=f"选择的颜色: {color_result[1]}",
                fg=color_result[1]  # 用选择的颜色设置文本颜色
            )
        else:
            self.result_label.config(text="未选择任何颜色", fg="black")

    def show_message_dialog(self):
        """显示消息对话框"""
        # 信息对话框
        messagebox.showinfo("信息", "这是一个信息对话框")

        # 询问对话框
        result = messagebox.askyesno("询问", "你确定要执行这个操作吗?")
        if result:
            self.result_label.config(text="用户选择了: 是")
        else:
            self.result_label.config(text="用户选择了: 否")

    def show_save_dialog(self):
        """显示保存文件对话框"""
        save_path = filedialog.asksaveasfilename(
            title="保存文件",
            defaultextension=".txt",
            filetypes=[("文本文件", "*.txt"), ("Python文件", "*.py"), ("所有文件", "*.*")]
        )
        if save_path:
            self.result_label.config(text=f"文件将保存到: {save_path}")
        else:
            self.result_label.config(text="取消保存文件")


if __name__ == "__main__":
    root = tk.Tk()
    app = CommonDialogExample(root)
    root.mainloop()